package cn.edu.neu.lab603.cloudeval.monitor

import java.util.concurrent.atomic.AtomicLong

import cn.edu.neu.lab603.cloudeval.CloudEval
import cn.edu.neu.lab603.des.{SimMetric, SimMonitor}

/** 事件次数统计。
  *
  * Created by yfwz100 on 2016/11/4.
  */
class CounterMetric[+E](cls: Class[E]) extends SimMonitor[CloudEval] with SimMetric[Long] {

  private val counter = new AtomicLong

  override def isMatch(context: CloudEval): Boolean = cls.isInstance(context.getCurrentTask)

  /** 获取当前的监控数值。 */
  override def getCurrentValue = counter.get

  /** 任务执行前执行的内容。
    *
    * @param context 执行上下文
    */
  override def before(context: CloudEval): Unit = {}

  /** 任务执行后执行的内容。
    *
    * @param context 执行上下文
    */
  override def after(context: CloudEval): Unit = {
    if (context.getCurrentTask.effective) counter.incrementAndGet
  }
}
